import re

"""
在线正则表达式工具站点
https://tool.oschina.net/regex/

正则表达式匹配，也就是用一定的规则将特定的文本提取出来

常用匹配规则!!!

\w	匹配字母、数字及下划线
\W	匹配不是字母、数字及下划线的字符
\s	匹配任意空白字符，等价于 [\t\n\r\f]
\S	匹配任意非空字符
\d	匹配任意数字，等价于 [0-9]
\D	匹配任意非数字的字符
\A	匹配字符串开头
\Z	匹配字符串结尾，如果存在换行，只匹配到换行前的结束字符串
\z	匹配字符串结尾，如果存在换行，同时还会匹配换行符
\G	匹配最后匹配完成的位置
\n	匹配一个换行符
\t	匹配一个制表符
^	匹配一行字符串的开头
$	匹配一行字符串的结尾
.	匹配任意字符，除了换行符，当 re.DOTALL 标记被指定时，则可以匹配包括换行符的任意字符
[...]	用来表示一组字符，单独列出，比如 [amk] 匹配 a、m 或 k
[^...]	不在 [] 中的字符，比如 匹配除了 a、b、c 之外的字符
*	匹配 0 个或多个表达式
+	匹配 1 个或多个表达式
?	匹配 0 个或 1 个前面的正则表达式定义的片段，非贪婪方式
{n}	精确匹配 n 个前面的表达式
{n, m}	匹配 n 到 m 次由前面正则表达式定义的片段，贪婪方式
`a	b`	匹配 a 或 b
()	匹配括号内的表达式，也表示一个组

"""

# 示例 1 match   向它传入要匹配的字符串以及正则表达式，就可以检测这个正则表达式是否匹配字符串
"""
    match 方法会尝试从字符串的起始位置匹配正则表达式，如果匹配，就返回匹配成功的结果(SRE_Match 对象)；如果不匹配，就返回 None
    result.group 方法可以输出匹配到的内容
    result.span  方法输出匹配的位置索引范围
    
    注意: match 必需从开头开始匹配，如果开头都没有匹配到，则直接就失败了
"""

content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}', content)
print(result) # <re.Match object; span=(0, 25), match='Hello 123 4567 World_This'>
print(result.group()) #  输出匹配到的字符串，Hello 123 4567 World_This
print(result.span()) # 输出匹配到的原字符串的位置范围 (0, 25)





